iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
Software Development

LeetCode-30 Days of JavaScript系列 第 10

LeetCode JS30-Day10 | 2666. Allow One Function Call 只允許調用函式一次

  • 分享至 

  • xImage
  •  

Day10 - 2666. Allow One Function Call 只允許調用函式一次 EASY

Description❓

Given a function fn, return a new function that is identical to the original function except that it ensures fn is called at most once.

  • The first time the returned function is called, it should return the same result as fn.
  • Every subsequent time it is called, it should return undefined.

給定一個函數 fn作為參數,返回一個與原始函數相同的新函數,只不過它確保 fn 最多被調用一次。

  • 第一次調用返回的函數時,它應該返回與 fn 相同的結果。
  • 隨後每次調用它時,它都應該返回undefined。

Points

Solution✍️

[ ▶️挑戰這一題 ][ 本日代碼 ]

太好了!昨天學到的剩餘參數今天也用上了!

const once = (fn)=>{
   let wasCalled = false;

   return (...args)=>{
      if(!wasCalled){
         wasCalled=true;
         // 返回與原始函數相同的結果
         // 做法:宣告新函式引用原始函式,同時將原始函數的參數傳遞給新函數
         let result = fn(...args); 
         return result;
      }else{
         return undefined;
      }  
   }
}

Testcase

fn = (a,b,c) => (a + b + c);
const wrappedFn1 = once(fn);
console.log(wrappedFn1(1,2,3),wrappedFn1(4,5,6));
// 6 undefined
fn = (a,b,c) => (a * b * c);
const wrappedFn2 = once(fn);
console.log(wrappedFn2(5,7,4),wrappedFn2(2,3,6),wrappedFn2(4,6,8));
// 140 undefined undefined

上一篇
LeetCode JS30-Day09 | 2703. Return Length of Arguments Passed 認識剩餘參數
下一篇
LeetCode JS30-Day11 | 2623. Memoize 記憶函式
系列文
LeetCode-30 Days of JavaScript30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言